package interfaz;


import gestores.GestorCompetencia;

import javax.swing.JPanel;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridBagLayout;
import javax.swing.JLabel;
import java.awt.GridBagConstraints;
import java.awt.Insets;
import java.awt.event.ActionListener;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.JTabbedPane;
import javax.swing.JTable;
import javax.swing.JScrollPane;
import javax.swing.JButton;
import javax.swing.table.DefaultTableModel;

import componentes.Competencia;
import componentes.Encuentro;
import componentes.Usuario;
import dto.DTOcompetencia;

import java.awt.event.ActionEvent;
import java.util.ArrayList;
import java.util.List;
import java.awt.Font;

public class VerCompetencia extends JPanel {
	private JTextField textCompetencia;
	private JTextField textModalidad;
	private JTextField textDeporte;
	private JTextField textEstado;
	private JButton genFixture ;
	private JButton tablaPosiciones;
	private JButton modCompetencia;
	private JButton verFixture;
	private JButton verParticipante;
	private JButton eliminar;
	private JButton btnVolver;
	private JLabel lblVerCompetencia;
	private JLabel lblNombreCompetencia;
	private JLabel lblModalidad;
	private JLabel lblEstado;
	private JLabel lblDeporteAsociado;
	Object columnNames[] = { "Fecha","Encuentro", "Equipo A","Equipo B","Lugar" };
	
	private Object datos[][] = {};
	private JScrollPane scrollPane_1;
	private JTable table;
	private JLabel lblNewLabel;
	
	/**
	 * Create the panel.
	 * @param nombre 
	 * @param panelPrincipal 
	 * @param panelAnterior 
	 * @param pantallaInicialUserReg 
	 * @param usuarioLogueado 
	 * @param nombre 
	 */
	public VerCompetencia(String nombreComp, JPanel panelPrincipal, Usuario usuarioLogueado, PantallaInicialUserReg pantallaInicialUserReg) {
		
		
		setBackground(new Color(236, 141, 4));
		GridBagLayout gridBagLayout = new GridBagLayout();
		gridBagLayout.columnWidths = new int[]{207, 165, 171, 0};
		gridBagLayout.rowHeights = new int[]{40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0};
		gridBagLayout.columnWeights = new double[]{1.0, 1.0, 1.0, Double.MIN_VALUE};
		gridBagLayout.rowWeights = new double[]{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, Double.MIN_VALUE};
		setLayout(gridBagLayout);
				
		lblVerCompetencia = new JLabel("Ver Competencia");
		lblNombreCompetencia = new JLabel("Nombre de la Competencia:");
		textModalidad = new JTextField();
		lblModalidad = new JLabel("Modalidad de la Competencia:");
		textCompetencia = new JTextField();
		lblDeporteAsociado = new JLabel("Deporte Asociado:");
		textDeporte = new JTextField();
		lblEstado = new JLabel("Estado:");
		textEstado = new JTextField();
		btnVolver = new JButton("Volver");		
		genFixture = new JButton("Generar Fixture");
		verParticipante = new JButton("Ver Participante");
		verFixture = new JButton("Ver Fixture");
		tablaPosiciones = new JButton("Tabla de Posiciones");
		eliminar = new JButton("Eliminar");
		modCompetencia = new JButton("Modificar Competencia");
		table= new JTable(datos, columnNames);
		table.getTableHeader().setReorderingAllowed(false);
		scrollPane_1 = new JScrollPane();
		
		inicializar(nombreComp, panelPrincipal, usuarioLogueado, pantallaInicialUserReg, this);
	}

	
	
		public void inicializar(String nombreComp, final JPanel panelPrincipal, final Usuario usuarioLogueado, final PantallaInicialUserReg pantallaInicialUserReg, final JPanel panelVerCompetencia){

			GridBagConstraints gbc_lblVerCompetencia = new GridBagConstraints();
			gbc_lblVerCompetencia.gridwidth = 3;
			gbc_lblVerCompetencia.insets = new Insets(0, 0, 5, 0);
			gbc_lblVerCompetencia.gridx = 0;
			gbc_lblVerCompetencia.gridy = 0;
			add(lblVerCompetencia, gbc_lblVerCompetencia);
			
			GridBagConstraints gbc_lblNombreDeLa = new GridBagConstraints();
			gbc_lblNombreDeLa.anchor = GridBagConstraints.EAST;
			gbc_lblNombreDeLa.insets = new Insets(0, 0, 5, 5);
			gbc_lblNombreDeLa.gridx = 0;
			gbc_lblNombreDeLa.gridy = 1;
			add(lblNombreCompetencia, gbc_lblNombreDeLa);

			GridBagConstraints gbc_textField = new GridBagConstraints();
			gbc_textField.anchor = GridBagConstraints.WEST;
			gbc_textField.fill = GridBagConstraints.HORIZONTAL;
			gbc_textField.insets = new Insets(0, 0, 5, 5);
			gbc_textField.gridx = 1;
			gbc_textField.gridy = 1;
			add(textCompetencia, gbc_textField);
			textCompetencia.setColumns(10);
			textCompetencia.setEditable(false);
			textCompetencia.setBackground(new Color(236, 141, 4));
			textCompetencia.setBorder(null);		
			
			

			GridBagConstraints gbc_lblModalidadDeLa = new GridBagConstraints();
			gbc_lblModalidadDeLa.anchor = GridBagConstraints.EAST;
			gbc_lblModalidadDeLa.insets = new Insets(0, 0, 5, 5);
			gbc_lblModalidadDeLa.gridx = 0;
			gbc_lblModalidadDeLa.gridy = 2;
			add(lblModalidad, gbc_lblModalidadDeLa);
			
			GridBagConstraints gbc_textField_1 = new GridBagConstraints();
			gbc_textField_1.anchor = GridBagConstraints.WEST;
			gbc_textField_1.fill = GridBagConstraints.HORIZONTAL;
			gbc_textField_1.insets = new Insets(0, 0, 5, 5);
			gbc_textField_1.gridx = 1;
			gbc_textField_1.gridy = 2;
			add(textModalidad, gbc_textField_1);
			textModalidad.setColumns(10);
			textModalidad.setEditable(false);
			textModalidad.setBackground(new Color(236, 141, 4));
			textModalidad.setBorder(null);
			
			GridBagConstraints gbc_lblDeporteAsociado = new GridBagConstraints();
			gbc_lblDeporteAsociado.anchor = GridBagConstraints.EAST;
			gbc_lblDeporteAsociado.insets = new Insets(0, 0, 5, 5);
			gbc_lblDeporteAsociado.gridx = 0;
			gbc_lblDeporteAsociado.gridy = 3;
			add(lblDeporteAsociado, gbc_lblDeporteAsociado);
					
			GridBagConstraints gbc_textField_2 = new GridBagConstraints();
			gbc_textField_2.insets = new Insets(0, 0, 5, 5);
			gbc_textField_2.fill = GridBagConstraints.HORIZONTAL;
			gbc_textField_2.gridx = 1;
			gbc_textField_2.gridy = 3;
			add(textDeporte, gbc_textField_2);
			textDeporte.setColumns(10);
			textDeporte.setEditable(false);
			textDeporte.setBackground(new Color(236, 141, 4));
			textDeporte.setBorder(null);
					
			GridBagConstraints gbc_lblEstado = new GridBagConstraints();
			gbc_lblEstado.anchor = GridBagConstraints.EAST;
			gbc_lblEstado.insets = new Insets(0, 0, 5, 5);
			gbc_lblEstado.gridx = 0;
			gbc_lblEstado.gridy = 4;
			add(lblEstado, gbc_lblEstado);
			
			GridBagConstraints gbc_textField_3 = new GridBagConstraints();
			gbc_textField_3.insets = new Insets(0, 0, 5, 5);
			gbc_textField_3.fill = GridBagConstraints.HORIZONTAL;
			gbc_textField_3.gridx = 1;
			gbc_textField_3.gridy = 4;
			add(textEstado, gbc_textField_3);
			textEstado.setColumns(10);
			textEstado.setEditable(false);
			textEstado.setBackground(new Color(236, 141, 4));
			textEstado.setBorder(null);
			
			
			GridBagConstraints gbc_tabbedPane = new GridBagConstraints();
			gbc_tabbedPane.gridheight = 5;
			gbc_tabbedPane.anchor = GridBagConstraints.EAST;
			gbc_tabbedPane.fill = GridBagConstraints.BOTH;
			gbc_tabbedPane.gridwidth = 3;
			gbc_tabbedPane.insets = new Insets(5, 10, 5, 16);
			gbc_tabbedPane.gridx = 0;
			gbc_tabbedPane.gridy = 5;
			
			lblNewLabel = new JLabel("PROXIMOS ENCUENTROS");
			lblNewLabel.setFont(new Font("Tahoma", Font.BOLD, 11));
			GridBagConstraints gbc_lblNewLabel = new GridBagConstraints();
			gbc_lblNewLabel.anchor = GridBagConstraints.SOUTH;
			gbc_lblNewLabel.insets = new Insets(0, 0, 5, 5);
			gbc_lblNewLabel.gridx = 0;
			gbc_lblNewLabel.gridy = 5;
			add(lblNewLabel, gbc_lblNewLabel);
			
			
			GridBagConstraints gbc_scrollPane_1 = new GridBagConstraints();
			gbc_scrollPane_1.gridheight = 5;
			gbc_scrollPane_1.gridwidth = 3;
			gbc_scrollPane_1.insets = new Insets(5, 10, 5, 10);
			gbc_scrollPane_1.fill = GridBagConstraints.BOTH;
			gbc_scrollPane_1.gridx = 0;
			gbc_scrollPane_1.gridy = 6;
			add(scrollPane_1, gbc_scrollPane_1);
			
			
			scrollPane_1.setViewportView(table);

			GridBagConstraints gbc_modCompetencia = new GridBagConstraints();
			gbc_modCompetencia.fill = GridBagConstraints.HORIZONTAL;
			gbc_modCompetencia.insets = new Insets(5, 30, 5, 30);
			gbc_modCompetencia.gridx = 0;
			gbc_modCompetencia.gridy = 11;
			add(modCompetencia, gbc_modCompetencia);

			GridBagConstraints gbc_eliminar = new GridBagConstraints();
			gbc_eliminar.fill = GridBagConstraints.HORIZONTAL;
			gbc_eliminar.insets = new Insets(5, 30, 5, 30);
			gbc_eliminar.gridx = 0;
			gbc_eliminar.gridy = 12;
			add(eliminar, gbc_eliminar);

			GridBagConstraints gbc_tablaPosiciones = new GridBagConstraints();
			gbc_tablaPosiciones.fill = GridBagConstraints.HORIZONTAL;
			gbc_tablaPosiciones.insets = new Insets(5, 30, 5, 30);
			gbc_tablaPosiciones.gridx = 1;
			gbc_tablaPosiciones.gridy = 12;
			add(tablaPosiciones, gbc_tablaPosiciones);

			GridBagConstraints gbc_verFixture = new GridBagConstraints();
			gbc_verFixture.fill = GridBagConstraints.HORIZONTAL;
			gbc_verFixture.insets = new Insets(5, 30, 5, 30);
			gbc_verFixture.gridx = 2;
			gbc_verFixture.gridy = 12;
			add(verFixture, gbc_verFixture);

			GridBagConstraints gbc_verParticipante = new GridBagConstraints();
			gbc_verParticipante.fill = GridBagConstraints.HORIZONTAL;
			gbc_verParticipante.insets = new Insets(5, 30, 5, 30);
			gbc_verParticipante.gridx = 1;
			gbc_verParticipante.gridy = 11;
			add(verParticipante, gbc_verParticipante);
			
			GridBagConstraints gbc_genFixture = new GridBagConstraints();
			gbc_genFixture.fill = GridBagConstraints.HORIZONTAL;
			gbc_genFixture.insets = new Insets(5, 30, 5, 30);
			gbc_genFixture.gridx = 2;
			gbc_genFixture.gridy = 11;
			add(genFixture, gbc_genFixture);
					
			GridBagConstraints gbc_btnVolver = new GridBagConstraints();
			gbc_btnVolver.fill = GridBagConstraints.HORIZONTAL;
			gbc_btnVolver.insets = new Insets(5, 30, 0, 30);
			gbc_btnVolver.gridx = 1;
			gbc_btnVolver.gridy = 13;
			add(btnVolver, gbc_btnVolver);
			
			/**..CODIGO..*/
			
			DTOcompetencia dtoComp = new DTOcompetencia();
			dtoComp.setNombre(nombreComp);
			final Competencia competencia = GestorCompetencia.getInstance().completarCompetencia(dtoComp, usuarioLogueado); // completa  el  dto para crear una competencia
			textCompetencia.setText(competencia.getNombre());
			textDeporte.setText(competencia.getDeporte().getNombre());
			textModalidad.setText(competencia.getModalidad().getTipoModalidad());
			textEstado.setText(competencia.getEstado());
		

			List<Encuentro> listaEncuentros= new ArrayList<Encuentro>();
	        listaEncuentros=GestorCompetencia.getInstance().proximosEncuentros(competencia);
			datos = new Object[listaEncuentros.size()][5];
			for (int j = 0; j < listaEncuentros.size(); j++) {
				datos[j][0]=listaEncuentros.get(j).getFecha();
				datos[j][1]=listaEncuentros.get(j).getnEncuentro();
				datos[j][2]=listaEncuentros.get(j).getPart1().getNombre();
				datos[j][3]=listaEncuentros.get(j).getPart2().getNombre();
				datos[j][4]=listaEncuentros.get(j).getLugarRealizacion().getNombre(); //para mi no va
			}
			table = new JTable(datos, columnNames);
			scrollPane_1.setViewportView(table);
			table = new JTable(datos, columnNames);
			final DefaultTableModel tableModel = new DefaultTableModel(datos, columnNames) {
				public boolean isCellEditable(int row, int column) {
					return false;
				}
			};
			scrollPane_1.setViewportView(table);
			table.setModel(tableModel);
			table.getTableHeader().setReorderingAllowed(false);
			

		//funciones botones
		genFixture.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if(competencia.getListaParticipantes().size()>=2){
					
					JPanel generarFixture= new GenerarFixture(competencia, panelPrincipal, usuarioLogueado, pantallaInicialUserReg);
					generarFixture.setVisible(true);
					setVisible(false);
					pantallaInicialUserReg.add(generarFixture,BorderLayout.CENTER);
				}
				else{
					JOptionPane.showMessageDialog(null, "La cantidad de participantes no alcanza para generar el fixture", "Aviso", JOptionPane.INFORMATION_MESSAGE);
				}
			}
		});
		
		tablaPosiciones.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				
				if(competencia.getModalidad().getTipoModalidad().equals("Liga") && (competencia.getEstado().equals("En Disputa")) || competencia.getEstado().equals("Finalizada")){
					if(competencia.getFixture().getEncuentros().size()!=0){
						
						JPanel tablaPos= new MostrarTablaPosiciones(competencia, panelVerCompetencia, usuarioLogueado, pantallaInicialUserReg);
						setVisible(false);
						tablaPos.setVisible(true);
						pantallaInicialUserReg.add(tablaPos,BorderLayout.CENTER);
					}
					else{
						JOptionPane.showMessageDialog(null, "La competencia no tiene el fixture creado", "Error", JOptionPane.ERROR_MESSAGE);
					}
				}
				else{
					JOptionPane.showMessageDialog(null, "La competencia no es Liga o no ha comenzado", "Error", JOptionPane.ERROR_MESSAGE);
				}
			}
		});
		
		modCompetencia.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				JOptionPane.showMessageDialog(null, "Funcionalidad no implementada", "Aviso", JOptionPane.INFORMATION_MESSAGE);
			}
		});
		
		verFixture.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				
				if(competencia.getFixture().getEncuentros().size()!=0){	
					JPanel fixture= new MostrarFixture(competencia.getNombre(), panelVerCompetencia, usuarioLogueado, pantallaInicialUserReg);
					setVisible(false);
					fixture.setVisible(true);
					pantallaInicialUserReg.add(fixture,BorderLayout.CENTER);
			    }
				else{
					JOptionPane.showMessageDialog(null, "No hay fixture creado", "Aviso", JOptionPane.INFORMATION_MESSAGE);
				}
			}
		});
		
		verParticipante.addActionListener(new ActionListener() {  
			public void actionPerformed(ActionEvent e) {
			JPanel participantes= new ListarParticipantes(competencia, panelVerCompetencia, pantallaInicialUserReg);
			setVisible(false);
			participantes.setVisible(true);
			pantallaInicialUserReg.add(participantes,BorderLayout.CENTER);
			}
		});
		
		eliminar.addActionListener(new ActionListener() {  
			
			public void actionPerformed(ActionEvent e) {
				JOptionPane.showMessageDialog(null, "Implementar codigo", "Aviso", JOptionPane.INFORMATION_MESSAGE);
			}
		});
		
        btnVolver.addActionListener(new ActionListener() {  
			
			public void actionPerformed(ActionEvent e) {
				setVisible(false);
				panelPrincipal.setVisible(true);
			}
			
		});
	}

}
